package notes.java.juc.demo;

/**
 * 测试volatile不具备原子性
 *
 * 结果：经多次运行结果得出，存在重复的num。即无法保证num变量的原子性，每个线程都能访问，不具备互斥性
 * 解决办法：使用AtomicInteger
 */
public class J2_TestAtomic {

	public static void main(String[] args) {
		
		// 创建10个子线程
		TestThread2 tt = new TestThread2();
		for(int i=0;i <10; i++) {
			new Thread(tt).start();
		}
	}
}

class TestThread2 implements Runnable {

	private volatile int num = 0;
	
	// 解决办法
//	private AtomicInteger num2 = new AtomicInteger();

	@Override
	public void run() {
		try {
			Thread.sleep(1000);
			System.out.println(Thread.currentThread().getName() + ":" + getNum ());
		} catch (InterruptedException e) {
			e.printStackTrace();
		}
	}
	
	public int getNum () {
		return this.num++;
		// 解决办法
//		return num2.getAndIncrement();
	}
}
